package berkeley.lab6.sortedlist;

/* ListNode.java */
/**
 * ListNode is a class used internally by the List class. Each node in a List is represented as a ListNode, with an item
 * and a reference to the next node in the list.
 *
 */
class ListNode {

    Keyable item;
    ListNode next;

    /**
     * Constructs a ListNode with item obj and next null.
     *
     * @param obj will be the item in the node.
     *
     */
    ListNode(Keyable obj) {
        item = obj;
        next = null;
    }

    /**
     * Constructs a ListNode with item obj and next n.
     *
     * @param obj will be the item in the node.
     * @param n will be the next ListNode in the list.
     *
     */
    ListNode(Keyable obj, ListNode n) {
        item = obj;
        next = n;
    }

    /**
     * ptrTo() returns a reference to the node at the given position. If position < 1 or position > the number of nodes
     * in the list, returns null. Assumes the list is acyclic.
     *
     * @return a reference to the node at position "position".
     */
    public ListNode ptrTo(int position) {
        if (position < 1) {
            return null;
        } else if (position == 1) {
            return this;
        } else if (next == null) {
            return null;
        } else {
            return next.ptrTo(position - 1);
        }
    }
}
